package org.gdstash.db.criteria;

import org.gdstash.db.SelectionCriteria;

import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;

public interface CriteriaCombination extends Cloneable {
    SelectionCriteria getCriteria();

    String determineLevel1Statement(final Soulbound p0, final SC_HC p1, final boolean p2, final String p3);

    List<CriteriaCombination> createLevel1Combinations(final CriteriaCombination p0);

    int fillLevel1Statement(final PreparedStatement p0) throws SQLException;

    String determineLevel1Parameters();

    String determineLevel2Statement(final String p0, final SelectionCriteria.StatInfo p1);

    int fillLevel2Statement(final PreparedStatement p0, final String p1, final int p2) throws SQLException;

    void addSingleIntCombo(final List<Integer> p0, final PreparedStatement p1, final String p2, final String p3) throws SQLException, UnsupportedOperationException;

    void addSingleStringCombo(final List<String> p0, final PreparedStatement p1, final String p2, final String p3) throws SQLException, UnsupportedOperationException;

    CriteriaCombination clone();

    void setItemClass(final String p0);

    void setArmorClass(final String p0);

    void setArtifactClass(final String p0);

    void setItemRarity(final String p0);

    void setItemName(final String p0);

    boolean usesArmorClass();

    boolean usesArtifactClass();

    boolean usesItemRarity();

    boolean usesItemName();

    public enum Soulbound {
        INCLUDED,
        EXCLUDED,
        SETTING;
    }

    public enum SC_HC {
        SOFTCORE,
        HARDCORE,
        ALL,
        SETTING;
    }
}
